#include <Python.h>
#include <cstdio>
#include <iostream>
#include <unistd.h>

#include "calculator.h" 

// 3. 模块定义
static PyModuleDef script_module = {
    .m_base = PyModuleDef_HEAD_INIT,
    .m_name = "script",
    .m_doc = "script module",
    .m_size = -1,
    // .m_methods = script_methods,
};

// 4. 模块初始化函数（必须导出）
PyMODINIT_FUNC PyInit_script_module(void) {
    PyObject* module = NULL;

    // 注册类型
    if (PyType_Ready(&CalculatorType) < 0) {
        return NULL;
    }
 
    // 创建模块
    module = PyModule_Create(&script_module);
    if (module == NULL) {
        return NULL;
    }

    // 将类型对象添加到模块中
    Py_INCREF(&CalculatorType);
    if (PyModule_AddObject(module, "Calculator", (PyObject*)&CalculatorType) < 0) {
        Py_DECREF(&CalculatorType);
        Py_DECREF(module);
        return NULL;
    }
 
    return module;
}

int main(int argc, char* argv[]) {
    logd("当前目录: %s\n", getcwd(NULL, 0));

    // 初始化Python
    Py_Initialize();

    // 手动加载模块（替代import）
    PyObject* script_module = PyInit_script_module();
    // 将模块添加到全局字典中
    PyDict_SetItemString(PyImport_GetModuleDict(), "script", script_module);

    // 执行Python代码
    {
        FILE* fp = fopen("script.py", "r");
        if (!fp) {
            perror("无法打开文件");
            return 1;
        }
        int ret = PyRun_SimpleFile(fp, "script.py");
        fclose(fp);
    
        if (ret != 0) {
            PyErr_Print();  // 打印Python错误
        }
    }

    // 清理
    Py_Finalize();
    return 0;
}

